package com.xiaoming.config;

import com.baomidou.mybatisplus.extension.plugins.OptimisticLockerInterceptor;
import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.transaction.annotation.EnableTransactionManagement;

@Configuration
@MapperScan("com.xiaoming")
@EnableTransactionManagement
public class MybatisPlusConfig {

    /**
     * SQL执行效率插件
     * 该插件 3.2.0 以上版本移除推荐使用第三方扩展 执行SQL分析打印 功能
     * 开发环境使用，线上不推荐。 maxTime 指的是 sql 最大执行时长
     */
   /* @Bean
    @Profile({"dev","test"})// 设置 dev test 环境开启
    public PerformanceInterceptor performanceInterceptor() {
        PerformanceInterceptor interceptor = new PerformanceInterceptor();
        //ms。超过此处设置的ms，则sql不执行
        interceptor.setMaxTime(100);
        //SQL是否格式化 默认false
        interceptor.setFormat(true);
        return interceptor;
    }*/

    /**
     * 逻辑删除注册 Bean(3.1.1开始不再需要这一步)
     * @return
     */
  /*  @Bean
    public ISqlInjector sqlInjector() {
        return new LogicSqlInjector();
    }
*/
    /**
     * 分页插件
     * @return
     */
    @Bean
    public PaginationInterceptor paginationInterceptor() {
        PaginationInterceptor paginationInterceptor = new PaginationInterceptor();
        // 设置请求的页面大于最大页后操作， true调回到首页，false 继续请求  默认false
        // paginationInterceptor.setOverflow(false);
        // 设置最大单页限制数量，默认 500 条，-1 不受限制
        // paginationInterceptor.setLimit(500);
        // 开启 count 的 join 优化,只针对部分 left join
//        paginationInterceptor.setCountSqlParser(new JsqlParserCountOptimize(true));
        return paginationInterceptor;
    }

    /**
     * 乐观锁插件
     * @return
     */
    @Bean
    public OptimisticLockerInterceptor optimisticLockerInterceptor() {
        return new OptimisticLockerInterceptor();
    }
}
